package plugins.order;

import kd.bos.cache.CacheFactory;
import kd.bos.cache.DistributeSessionlessCache;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.ShowType;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.list.BillList;
import kd.bos.list.ListShowParameter;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;

import java.util.ArrayList;
import java.util.List;

/**
 * 标准单据列表插件
 */
public class toMenu extends AbstractListPlugin implements Plugin {

    // 处理点击事件
    public void itemClick(ItemClickEvent e) {
        super.registerListener(e);

        // 检测到点击事件
        if (e.getItemKey().equalsIgnoreCase("dcb4_order")){

            // 获取当前列表选中行
            BillList billList = this.getView().getControl("billlistap");
            ListSelectedRowCollection selectedRows = billList.getSelectedRows();

            // 如果没有选中数据行
            if (selectedRows.isEmpty()) {

                // 如果没有选中行，直接打开菜品列表
                ListShowParameter nxtList = new ListShowParameter(); // 固定的
                nxtList.setFormId("bos_list"); // 固定的
                nxtList.setBillFormId("dcb4_dishes"); // 列表对应的单据字段
                nxtList.getOpenStyle().setShowType(ShowType.Modal); // 打开风格，有非常多种
                this.getView().showForm(nxtList);

            } else {

                // 创建缓存
                DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");

                // 存储字段值的集合
                List<Object> names = new ArrayList<>();
                for (ListSelectedRow row : selectedRows) {
                    // 获取特定字段值（例如字段标识为 "dcb4_merchantdata"）

                    // 如果有选中数据行，传递选中参数
                    Object pkValue = row.getPrimaryKeyValue();
                    // 根据主键加载完整的单据数据包
                    DynamicObject selectedData = BusinessDataServiceHelper.loadSingle(pkValue,"dcb4_merchantdata" );   // 替换为实际的单据实体标识，如"dcb4_merchantdata"
                    // 获取字段值
                    String name = selectedData.getString("name"); // 如物料编码

                    names.add(name);
                }

                // 序列化为 JSON 字符串并存入缓存
                String selectedmerchantnames = SerializationUtils.toJsonString(names);
                cache.put("selectedmerchantnames", selectedmerchantnames);


                // 打开目标页面
                ListShowParameter showParameter = new ListShowParameter();
                showParameter.setFormId("bos_list"); // 固定的
                showParameter.setBillFormId("dcb4_dishes"); // 列表对应的单据字段
                showParameter.getOpenStyle().setShowType(ShowType.Modal); // 打开风格，有非常多种
                this.getView().showForm(showParameter);

            }
        }
    }

}




/*

// 只送一个档口的数据

public class toMenu extends AbstractListPlugin implements Plugin {

    // 处理点击事件
    public void itemClick(ItemClickEvent e) {
        super.registerListener(e);

        // 检测到点击事件
        if (e.getItemKey().equalsIgnoreCase("dcb4_order")){

            // 获取当前列表选中行
            BillList billList = this.getView().getControl("billlistap");
            ListSelectedRowCollection selectedRows = billList.getSelectedRows();

            // 如果没有选中数据行
            if (selectedRows.isEmpty()) {

                // 如果没有选中行，直接打开菜品列表
                ListShowParameter nxtList = new ListShowParameter(); // 固定的
                nxtList.setFormId("bos_list"); // 固定的
                nxtList.setBillFormId("dcb4_dishes"); // 列表对应的单据字段
                nxtList.getOpenStyle().setShowType(ShowType.Modal); // 打开风格，有非常多种
                this.getView().showForm(nxtList);

            } else {

                // 创建缓存
                DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");

                // 如果有选中数据行，传递选中参数
                Object pkValue = selectedRows.get(0).getPrimaryKeyValue();

                // 根据主键加载完整的单据数据包
                DynamicObject selectedData = BusinessDataServiceHelper.loadSingle(pkValue,"dcb4_merchantdata" );   // 替换为实际的单据实体标识，如"dcb4_merchantdata"


                // 获取字段值
                String fieldValue = selectedData.getString("name"); // 如物料编码
                cache.put("selectedmerchantname", fieldValue);

                // 打开目标页面
                ListShowParameter showParameter = new ListShowParameter();
                showParameter.setFormId("bos_list"); // 固定的
                showParameter.setBillFormId("dcb4_dishes"); // 列表对应的单据字段
                showParameter.getOpenStyle().setShowType(ShowType.Modal); // 打开风格，有非常多种
                this.getView().showForm(showParameter);

            }
        }
    }

}

 */